package com.warmlight.voicepacket.utils;

import android.content.Context;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;

import com.google.gson.Gson;
import com.warmlight.voicepacket.data.UserInfoListData;
import com.warmlight.voicepacket.http.HttpClient;
import com.warmlight.voicepacket.http.HttpConfig;
import com.warmlight.voicepacket.http.ResponseData;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.List;
import java.util.TreeMap;

import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.rong.imkit.RongContext;
import io.rong.imkit.RongIM;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.UserInfo;

import static io.rong.imkit.utils.SystemUtils.getCurProcessName;

public class ImConnect {
    private static class getInstance{
        private static ImConnect instance=new ImConnect();
    }
    private ImConnect(){
    }
    public static ImConnect getInstance(){
        return getInstance.instance;
    }
    public void RongConnect(final Context context){
        if (!SPUtils.isLogined()){
            return;
        }
        //融云获取token并连接
        TreeMap map =new TreeMap();
        HttpClient.getInstance().postRxAndroidRONGToken(HttpConfig.GETTOKEN,map).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ResponseData>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }

                    @Override
                    public void onNext(ResponseData responseData) {
                        try {
                            JSONObject object =new JSONObject(responseData.getBody());
                            String tonke =object.getString("token");
                            connect(tonke,context);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onComplete() {
                    }
                });
    }
    private void connect(String token, final Context context) {
        if (context.getApplicationInfo().packageName.equals(getCurProcessName(context.getApplicationContext()))) {
            RongIM.connect(token, new RongIMClient.ConnectCallback() {

                /**
                 * Token 错误。可以从下面两点检查 1.  Token 是否过期，如果过期您需要向 App Server 重新请求一个新的 Token
                 *                  2.  token 对应的 appKey 和工程里设置的 appKey 是否一致
                 */
                @Override
                public void onTokenIncorrect() {
                }

                /**
                 * 连接融云成功
                 * @param userid 当前 token 对应的用户 id
                 */
                @Override
                public void onSuccess(String userid) {
                }

                /**
                 * 连接融云失败
                 * @param errorCode 错误码，可到官网 查看错误码对应的注释
                 */
                @Override
                public void onError(RongIMClient.ErrorCode errorCode) {

                }
            });
        }
    }
    public void SetUserProvide(){
        /**
         * 设置用户信息的提供者，供 RongIM 调用获取用户名称和头像信息。
         *
         * @param userInfoProvider 用户信息提供者。
         * @param isCacheUserInfo  设置是否由 IMKit 来缓存用户信息。<br>
         *                         如果 App 提供的 UserInfoProvider
         *                         每次都需要通过网络请求用户数据，而不是将用户数据缓存到本地内存，会影响用户信息的加载速度；<br>
         *                         此时最好将本参数设置为 true，由 IMKit 将用户信息缓存到本地内存中。
         * @see UserInfoProvider
         */
        RongIM.setUserInfoProvider(new RongIM.UserInfoProvider() {

            @Override
            public UserInfo getUserInfo(String userId) {

                return SetUserById(userId);//根据 userId 去你的用户系统里查询对应的用户信息返回给融云 SDK。
            }

        }, true);
    }

    /**
     * 异步更新
     * @param id
     * @return
     */
    public UserInfo SetUserById(final String id) {
        TreeMap treeMap = new TreeMap();
        treeMap.put("uids", id);
        HttpClient.getInstance().postRxAndroidAES(HttpConfig.GET_INFO, treeMap)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ResponseData>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(ResponseData responseData) {
                        if (TextUtils.equals("200", responseData.getCode())) {
                            String data = responseData.getData();
                            UserInfoListData userInfoListData = new Gson().fromJson(data, UserInfoListData.class);
                            List<UserInfoListData.ListBean> list = userInfoListData.getList();
                            if (list.size()>0){
                                UserInfoListData.ListBean listBean = list.get(0);
                                String avator = listBean.getAvator();
                                String nickname = listBean.getNickname();
//                                String uid = listBean.getUid();
                                if (!TextUtils.isEmpty(avator)){
                                    UserInfo userInfoFromCache = RongContext.getInstance().getUserInfoFromCache(id);
                                    if (userInfoFromCache != null) {
                                        userInfoFromCache.setPortraitUri(Uri.parse(avator));
                                    }
                                }

                                if (!TextUtils.isEmpty(nickname)){
                                    UserInfo userInfoFromCache = RongContext.getInstance().getUserInfoFromCache(id);
                                    if (userInfoFromCache != null) {
                                        userInfoFromCache.setName(nickname);
                                    }
                                }

                                if (avator!=null && nickname!=null){
                                    RongIM.getInstance().refreshUserInfoCache(new UserInfo(id,nickname,Uri.parse(avator)));
                                }

                            }

//                            if (userInfoListData.getList().size() > 0&&userInfoListData.getList().get(0).getNickname()!=null&&userInfoListData.getList().get(0).getAvator()!=null) {
//                                /**
//                                 * 刷新用户缓存数据。
//                                 *
//                                 * @param userInfo 需要更新的用户缓存数据。
//                                 */
//                                Logger.e("=-=-=-==-=-==-",userInfoListData.getList().get(0).getAvator());
//                                //刷新缓存
//                                RongContext.getInstance().getUserInfoFromCache(id).setPortraitUri(Uri.parse(userInfoListData.getList().get(0).getAvator()));//getUserInfoCache().put(String userid,UserInfo user);
//                                RongIM.getInstance().refreshUserInfoCache(new UserInfo(id,  userInfoListData.getList().get(0).getNickname(), Uri.parse(userInfoListData.getList().get(0).getAvator())));
////                return new UserInfo(id, userInfoListData.getList().get(0).getNickname(), Uri.parse(userInfoListData.getList().get(0).getAvator()));
//                            } else {
//                            }
                        } else {
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onComplete() {

                    }
                });
        return null;

    }
    }
